home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
MOR55SRC.ZIP
/
MORIA
/
SOURCE
/
EAT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-12-07
|
5KB
|
232 lines
/* source/eat.c: food code
Copyright (c) 1989-92 James E. Wilson, Robert A. Koeneke
This software may be copied and distributed for educational, research, and
not for profit purposes provided that this copyright and statement are
included in all such copies. */
#include "config.h"
#include "constant.h"
#include "types.h"
#include "externs.h"
#ifdef USG
#include <string.h>
#else
#include <strings.h>
#endif
/* Eat some food. -RAK- */
void eat()
{
int32u i;
int j, k, item_val, ident;
register struct flags *f_ptr;
register struct misc *m_ptr;
register inven_type *i_ptr;
#ifdef ATARIST_MWC
int32u holder;
#endif
free_turn_flag = TRUE;
if (inven_ctr == 0)
msg_print("But you are not carrying anything.");
else if (!find_range(TV_FOOD, TV_NEVER, &j, &k))
msg_print("You are not carrying any food.");
else if (get_item(&item_val, "Eat what?", j, k, CNIL, CNIL))
{
i_ptr = &inventory[item_val];
free_turn_flag = FALSE;
i = i_ptr->flags;
ident = FALSE;
while (i != 0)
{
j = bit_pos(&i) + 1;
/* Foods */
switch(j)
{
case 1:
f_ptr = &py.flags;
f_ptr->poisoned += randint(10) + i_ptr->level;
ident = TRUE;
break;
case 2:
f_ptr = &py.flags;
f_ptr->blind += randint(250) + 10*i_ptr->level + 100;
draw_cave();
msg_print("A veil of darkness surrounds you.");
ident = TRUE;
break;
case 3:
f_ptr = &py.flags;
f_ptr->afraid += randint(10) + i_ptr->level;
msg_print("You feel terrified!");
ident = TRUE;
break;
case 4:
f_ptr = &py.flags;
f_ptr->confused += randint(10) + i_ptr->level;
msg_print("You feel drugged.");
ident = TRUE;
break;
case 5:
f_ptr = &py.flags;
f_ptr->image += randint(200) + 25*i_ptr->level + 200;
msg_print("You feel drugged.");
ident = TRUE;
break;
case 6:
ident = cure_poison();
break;
case 7:
ident = cure_blindness();
break;
case 8:
f_ptr = &py.flags;
if (f_ptr->afraid > 1)
{
f_ptr->afraid = 1;
ident = TRUE;
}
break;
case 9:
ident = cure_confusion();
break;
case 10:
ident = TRUE;
lose_str();
break;
case 11:
ident = TRUE;
lose_con();
break;
#if 0 /* 12 through 15 are not used */
case 12:
ident = TRUE;
lose_int();
break;
case 13:
ident = TRUE;
lose_wis();
break;
case 14:
ident = TRUE;
lose_dex();
break;
case 15:
ident = TRUE;
lose_chr();
break;
#endif
case 16:
if (res_stat (A_STR))
{
msg_print("You feel your strength returning.");
ident = TRUE;
}
break;
case 17:
if (res_stat (A_CON))
{
msg_print("You feel your health returning.");
ident = TRUE;
}
break;
case 18:
if (res_stat (A_INT))
{
msg_print("Your head spins a moment.");
ident = TRUE;
}
break;
case 19:
if (res_stat (A_WIS))
{
msg_print("You feel your wisdom returning.");
ident = TRUE;
}
break;
case 20:
if (res_stat (A_DEX))
{
msg_print("You feel more dextrous.");
ident = TRUE;
}
break;
case 21:
if (res_stat (A_CHR))
{
msg_print("Your skin stops itching.");
ident = TRUE;
}
break;
case 22:
ident = hp_player(randint(6));
break;
case 23:
ident = hp_player(randint(12));
break;
case 24:
ident = hp_player(randint(18));
break;
#if 0 /* 25 is not used */
case 25:
ident = hp_player(damroll(3, 6));
break;
#endif
case 26:
ident = hp_player(damroll(3, 12));
break;
case 27:
take_hit(randint(18), "poisonous food.");
ident = TRUE;
break;
#if 0 /* 28 through 30 are not used */
case 28:
take_hit(randint(8), "poisonous food.");
ident = TRUE;
break;
case 29:
take_hit(damroll(2, 8), "poisonous food.");
ident = TRUE;
break;
case 30:
take_hit(damroll(3, 8), "poisonous food.");
ident = TRUE;
break;
#endif
default:
msg_print("Internal error in eat()");
break;
}
/* End of food actions. */
}
if (ident)
{
if (!known1_p(i_ptr))
{
/* use identified it, gain experience */
m_ptr = &py.misc;
/* round half-way case up */
m_ptr->exp += (i_ptr->level + (m_ptr->lev >> 1)) / m_ptr->lev;
prt_experience();
identify (&item_val);
i_ptr = &inventory[item_val];
}
}
else if (!known1_p(i_ptr))
sample (i_ptr);
add_food(i_ptr->p1);
#ifdef ATARIST_MWC
py.flags.status &= ~(holder = PY_WEAK|PY_HUNGRY);
#else
py.flags.status &= ~(PY_WEAK|PY_HUNGRY);
#endif
prt_hunger();
desc_remain(item_val);
inven_destroy(item_val);
}
}